package servet;
import pojo.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@WebServlet(urlPatterns = {"/user"})//此java类若想使用@WebServlet注解，必须继承HttpServlet类，而@WebServlet注解的作用是为web应用中的servlet提供映射，即在web.xml文件中配置servlet的url-pattern，即配置user.jsp文件。其值要与jsp文件名一致
//在浏览器网站的后缀上输入user即可访问内容
public class userservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<User> use=new ArrayList<>();
        //jdbc操作数据库
        String url = "jdbc:mysql://localhost:3306/jdbc";
        String user = "root";
        String pw = "123456";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url,user,pw);
            if (connection!=null){
                System.out.println("连接成功");
            }
            String sql="select * from user";
            PreparedStatement de=connection.prepareStatement(sql);
            ResultSet ui= de.executeQuery();
            while (ui.next()){
               User u=new User(ui.getInt("id"),ui.getString("name"),ui.getString("pass"));

               use.add(u);
            }
            connection.close();
            de.close();
            ui.close();
            req.setAttribute("users",use);//这行 Java 代码的作用是将一个名为 "users" 的属性添加到 HttpServletRequest 对象 req 中，并将其值设置为 use。具体来说：
//            设置属性: setAttribute 方法用于在请求对象中设置一个名称和值对应的键值对。
//            属性名: "users" 是这个属性的名称，后续可以通过这个名字来访问这个属性。
//            属性值: use 应该是一个对象，通常是包含用户数据的对象或集合，具体取决于上下文。
//            这样的操作通常用于将数据从后端控制器传递给 JSP 页面或其他处理页面，以便在页面上显示这些数据。例如，在 JSP 页面中可以通过 ${requestScope.users} 访问到这个属性。
            req.getRequestDispatcher("/user.jsp").forward(req,resp);//将请求和响应对象传递给 user.jsp 页面进行处理，其值要与jsp文件名一致
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        catch (SQLException e) {
            throw new RuntimeException(e);
        }


    }
}
